/**
 * 上海中赢金融信息服务有限公司
 * Copyright (c) 2016-2026 hmc,Inc.All Rights Reserved.
 */
package com.sys.midware.redis.config;

import java.util.ArrayList;
import java.util.List;

import com.sys.midware.config.core.ConfigContainer;
import com.sys.midware.config.core.ConfigKey;
import com.sys.midware.config.model.BNode;
import com.sys.midware.logger.Logger;
import com.sys.midware.logger.LoggerFactory;

/**
 * 
 * <b>ClassName：</b> ConfigMongoUtil <br/>
 * <b>Description：</b> 获取配置信息工具类 <br/>
 * <b>@author：</b> mobing <br/>
 * <b>@date：</b> 2015年10月19日 下午2:55:02 <br/>
 * <b>@version: </b> <br/>
 */
public class RedisConfigUtil {
    private static final Logger logger = LoggerFactory.getLogger(RedisConfigUtil.class);

    /**
     * ConfigContainer instance
     */
    private static ConfigContainer cfg = ConfigContainer.getInstance(ConfigKey.ConfigFile.CONFIG_FILE_ROOT);

   // public static final Map<String, RedisConfig> redisConfigCached = new HashMap<String, RedisConfig>();
    
   private static boolean inited =false;

    public static void initConfig() {
        
        if(inited){
            return;
        }
        logger.info("开始初始化redis配置...");
        RedisConfig  redisConfig=new RedisConfig();
        
        
        List<RedisNode> redisNodeList = new ArrayList<RedisNode>();
        List<BNode> bnodeList = cfg.getBNodeList();
        for (BNode b : bnodeList) {
            String nodeFor = b.getNodeFor();
            if ("redis".equals(nodeFor)) {
//                RedisConfig mc = new RedisConfig();
//                mc.setNodeName(b.getNodeName());
//                mc.setNodeType(b.getNodeType());
//                mc.setHost(b.getNodeParamStr(RedisConfigKey.KEY_REDIS_HOST));
//                mc.setPort(b.getNodeParamInteger(RedisConfigKey.KEY_REDIS_PORT));
//                mc.setUserName(b.getNodeParamStr(RedisConfigKey.KEY_REDIS_USERNAME));
//                mc.setPassword(b.getNodeParamStr(RedisConfigKey.KEY_REDIS_PASSWORD));
//                mc.setDataBase(b.getNodeParamStr(RedisConfigKey.KEY_REDIS_DATABASE));
                
                RedisNode redisNode= new RedisNode();
                redisNode.setNodeName(b.getNodeName());
                redisNode.setNodeType(b.getNodeType());
                redisNode.setHost(b.getNodeParamStr(RedisConfigKey.KEY_REDIS_HOST));
                redisNode.setPort(b.getNodeParamInteger(RedisConfigKey.KEY_REDIS_PORT));
                redisNode.setUserName(b.getNodeParamStr(RedisConfigKey.KEY_REDIS_USERNAME));
                redisNode.setPassword(b.getNodeParamStr(RedisConfigKey.KEY_REDIS_PASSWORD));
                redisNode.setDataBase(b.getNodeParamStr(RedisConfigKey.KEY_REDIS_DATABASE));
                
                redisNodeList.add(redisNode);
                // pool 属性
//                mc.setMaxTotal(cfg.getParamInteger(RedisConfigKey.KEY_REDIS_POOL_maxTotal));
//                mc.setMaxActive(cfg.getParamInteger(RedisConfigKey.KEY_REDIS_POOL_maxActive));
//                mc.setMaxIdle(cfg.getParamInteger(RedisConfigKey.KEY_REDIS_POOL_maxIdle));
//                mc.setMaxWait(cfg.getParamInteger(RedisConfigKey.KEY_REDIS_POOL_maxWait));
//                mc.setMinEvictableIdleTimeMillis(
//                        cfg.getParamInteger(RedisConfigKey.KEY_REDIS_POOL_minEvictableIdleTimeMillis));
//                mc.setMinIdle(cfg.getParamInteger(RedisConfigKey.KEY_REDIS_POOL_minIdle));
//                mc.setTestOnBorrow(cfg.getParamBoolean(RedisConfigKey.KEY_REDIS_POOL_testOnBorrow));
//                mc.setTestOnReturn(cfg.getParamBoolean(RedisConfigKey.KEY_REDIS_POOL_testOnReturn));
//                redisConfigCached.put(b.getNodeName(), mc);
            }
        }
        //运行模式
        redisConfig.setRunMode(cfg.getParamString(RedisConfigKey.KEY_RUNMODE));
        // pool 属性
        RedisPoolConfig redisPoolConfig = new RedisPoolConfig();
        redisPoolConfig.setMaxTotal(cfg.getParamInteger(RedisConfigKey.KEY_REDIS_POOL_maxTotal));
        redisPoolConfig.setMaxActive(cfg.getParamInteger(RedisConfigKey.KEY_REDIS_POOL_maxActive));
        redisPoolConfig.setMaxIdle(cfg.getParamInteger(RedisConfigKey.KEY_REDIS_POOL_maxIdle));
        redisPoolConfig.setMaxWait(cfg.getParamInteger(RedisConfigKey.KEY_REDIS_POOL_maxWait));
        redisPoolConfig.setMinEvictableIdleTimeMillis(
                cfg.getParamInteger(RedisConfigKey.KEY_REDIS_POOL_minEvictableIdleTimeMillis));
        redisPoolConfig.setMinIdle(cfg.getParamInteger(RedisConfigKey.KEY_REDIS_POOL_minIdle));
        redisPoolConfig.setTestOnBorrow(cfg.getParamBoolean(RedisConfigKey.KEY_REDIS_POOL_testOnBorrow));
        redisPoolConfig.setTestOnReturn(cfg.getParamBoolean(RedisConfigKey.KEY_REDIS_POOL_testOnReturn));
        
        redisConfig.setNodeList(redisNodeList);
        
        redisConfig.setRedisPoolConfig(redisPoolConfig);
        RedisConfigHolder.put(redisConfig);
        inited =true;
        logger.info("redis配置初始化完成.");
       
    }

}
